/*
 * Created by Jaren at 2021/8/17 21:11
 */

class Constant {
  static const int char1NeedEscape = 0xAA;
  static const int char2NeedEscape = 0xA5;
  static const int char3NeedEscape = 0xA5;

  static const int escapeChar = 0xA5;

  static const int noTab = 0x00; // 无TAB
  static const int hasTab = 0x40; // 有TAB

  static const int checkTypeNode = 0x00; // 无校验
  static const int checkTypeParity = 0x10; // 奇偶校验
  static const int checkTypeCRC16 = 0x20; // CRC16
  static const int checkTypeCRC32 = 0x30; // CRC32

  static const int hasEncrypt = 0x08; // 加密
  static const int noEncrypt = 0; // 不加密

  static const int dataTypeGeneralOne2One = 0x01;
  static const int dataTypeGeneralOne2Many = 0x02;
  static const int dataTypeGeneralMany2Many = 0x03;

  static const int dataTypeSpecialOne2One = 0x04;
  static const int dataTypeSpecialOne2Many = 0x05;
  static const int dataTypeSpecialMany2Many = 0x06;

  static const int hasNextTab = 0x80;

  static const int maxTabLength = 4;

  static const int maxCmdLength = 4;

  static const String aesPassword1 = "U3WSZX5TRFGV8IJK";
  static const String aesPassword2 = "WE02RFG8HJ4K98SG";

  static const int sourceNone = 0xFFFF; // 来源设备-无，仅标识用
  static const int targetNone = 0xFFFF; // 目标设备-无，仅标识用

  static const int deviceUnknown = 0x00; // 未知设备

  static const int sourceApp = 0x02; // 来源设备APP
  static const int sourceCloudBox = 0x04; // 目标设备-云盒

  static const int targetNotSpecified = 0x0; // 目标设备-未指定
  static const int deviceEUCV11HMIC = 0x21; // 独轮车V11-人机板设备号
  static const int deviceEUCV11Driver = 0x22; // 独轮车V11-主控板设备号
  static const int deviceEUCV11BLE = 0x23; // 独轮车V11-蓝牙板设备号

  static const int deviceEUCV12HMIC = 0x21; // 独轮车V12-人机板设备号
  static const int deviceEUCV12Driver = 0x22; // 独轮车V12-主控板设备号
  static const int deviceEUCV12BLE = 0x23; // 独轮车V12-蓝牙板设备号

  static const int deviceEUCV13HMIC = 0x21; // 独轮车V13-人机板设备号
  static const int deviceEUCV13Driver = 0x22; // 独轮车V13-主控板设备号
  static const int deviceEUCV13BLE = 0x23; // 独轮车V13-蓝牙板设备号
  static const int deviceEUCV13BMS1 = 0x24; // 独轮车V13-BMS1板设备号
  static const int deviceEUCV13BMS2 = 0x25; // 独轮车V13-BMS2板设备号
  static const int deviceScreen = 0x2E; // V18屏幕
  static const int deviceTBox = 0x2F; // 云盒

  static const int deviceS1Driver = 0x31; // 滑板S1-控制器设备号
  static const int deviceS1Display = 0x32; // 滑板S1-仪表设备号

  static const int deviceA1Driver = deviceS1Driver; // 滑板A1-控制器设备号
  static const int deviceA1Display = deviceS1Display; // 滑板A1-仪表设备号

  static const int deviceLC1Driver = deviceS1Driver; // 滑板LC1-控制器设备号
  static const int deviceLC1Display = deviceS1Display; // 滑板LC1-仪表设备号

  static const int deviceLE1Driver = deviceS1Driver; // 滑板LE1-控制器设备号
  static const int deviceLE1Display = deviceS1Display; // 滑板LE1-仪表设备号

  static const int deviceLR1Display = 0x31; // 滑板LR1-仪表设备号
  static const int deviceLR1Driver1 = 0x32; // 滑板LR1-控制器1设备号
  static const int deviceLR1Driver2 = 0x33; // 滑板LR1-控制器2设备号
  static const int deviceLR1BMS = 0x34; // 滑板LR1-BMS设备号

  static const int bmsCountV11Y = 2; // V11Y电池数量
  static const int bmsCountV13 = 2; // V13电池数量
  static const int bmsCountV14 = 4; // V14电池数量

  static const int calibrationAccHandle = 0; // 滑板车油门把手校准
  static const int calibrationBrakeHandle = 1; // 滑板车刹车把手校准
  static const int calibrationScooterIMUHandle = 2; // 滑板车IMU校准
  static const int calibrationTurning = 3; // EUC转弯前倾校准
  static const int calibrationBalance = 4; // EUC平衡角度校准
  static const int calibrationBatteryVoltage = 5; // EUC电池电压校准
  static const int calibrationMotorAutoCompat = 6; // EUC电机自适应
  static const int calibrationMotorSelfCheck = 7; // EUC电机自检

  static const int channelVerify = 0x00; // 通道-连接认证
  static const int channelInfo = 0x02; // 通道-产品信息读写
  static const int channelCtrl = 0x03; // 通道-通用控制
  static const int channelFile = 0x04; // 通道-文件操作
  static const int channelStorage = 0x05; // 通道-存储设备操作

  static const int propertyTypeRead = 0;
  static const int propertyTypeWrite = 0x80;

  static const int hasNextCmd = 0x80;
  static const int cmdTypeWrite = 0x40;
  static const int firstHasNextCmd = 0x20;

  /* ****************** 通道0-连接认证 Property START ****************** */

  static const int PROPERTY_VERIFY_IN_CHANNEL_VERIFY = 0x02; // 安全连接属性

  /* ******************* 通道0-连接认证 Property END ******************* */

  /* **************** 通道2-产品信息读写 Property START **************** */

  static const int PROPERTY_CHANNEL_INFO_CAR_TYPE = 0x01; // 产品型号及特征属性
  static const int PROPERTY_CHANNEL_INFO_CAR_SN = 0x02; // 产品SN
  static const int PROPERTY_CHANNEL_INFO_BATTERY_SN = 0x03; // 电池SN
  static const int PROPERTY_CHANNEL_INFO_MOTOR_SN = 0x04; // 电池SN
  static const int PROPERTY_CHANNEL_INFO_BATTERY_CAPACITY = 0x05; // 电池SN
  static const int PROPERTY_CHANNEL_INFO_VERSION = 0x06; // 固件版本号及设备号
  // 每9个字节表示一个版本号，首字节表示设备号，其后4字节表示应用程序版本号，末4字节表示引导程序版本号
  // 4字节的版本号中，首字节表示主版本号，其后1字节表示次版本号，末2字节表示修订号，如数值0x02010003 表示版本 2.1.3
  static const int PROPERTY_CHANNEL_INFO_RATED_VOLTAGE = 0x07; // 额定电压
  static const int PROPERTY_CHANNEL_INFO_RATED_POWER = 0x08; // 额定功率
  static const int PROPERTY_CHANNEL_INFO_DESIGNED_MAX_SPEED = 0x09; // 设计最高速度
  static const int PROPERTY_CHANNEL_INFO_DESIGNED_MAX_REMAIN_MILEAGE =
      0x0A; // 设计最大续航里程
  static const int PROPERTY_CHANNEL_INFO_IDENTIFIER = 0x0B; // 设备唯一ID
  static const int PROPERTY_CHANNEL_INFO_ACTIVATE_DATE = 0x0D; // 激活日期

  static const int PROPERTY_CHANNEL_INFO_HW_VERSION = 0x11; // 硬件版本号及设备号
  static const int PROPERTY_CHANNEL_INFO_TBOX_DEVICEID = 0x13; // 云盒deviceID
  static const int BINDING_TIRE_PRESSURE_SENSOR = 0x94; // 绑定胎压传感器, 读写特征: 读（0x14）写（0x94）
  static const int PROPERTY_CHANNEL_INFO_TIRE_PRESSURE_SENSOR = 0x14; // 胎压传感器信息

  /* ***************** 通道2-产品信息读写 Property END ***************** */

  /* ******************** 通道3-通用控制 Property START ******************** */

  static const int PROPERTY_SHUTDOWN = 0x01; // 关机/重启/休眠/唤醒
  static const int PROPERTY_SHUTDOWN_CONFIRM = 0x02; // 关机/重启/休眠/唤醒 应答
  static const int PROPERTY_FACTORY_RESET = 0x03; // 出厂重置
  static const int PROPERTY_FIRMWARE_STATUS = 0x04; // 启动固件升级（写）/ 获取固件升级状态（读）
  static const int PROPERTY_FORCE_UPGRADE = 0x05; // 强制固件升级
  static const int PROPERTY_LOST_MODE = 0x06; // 丢失模式（锁定和报警）

  static const int SHUTDOWN_TYPE_SHUTDOWN = 0; // 关机操作-关机
  static const int SHUTDOWN_TYPE_SLEEP = 1; // 关机操作-休眠
  static const int SHUTDOWN_TYPE_REBOOT = 2; // 关机操作-重启
  static const int SHUTDOWN_TYPE_WAKE_UP = 3; // 关机操作-唤醒

  static const int FACTORY_RESET_LEVEL_0 = 0; // 出厂重置级别0

  /* ******************** 通道3-通用控制 Property END ********************* */

  /* ******************** 通道4-文件操作 Property START ******************** */

  static const int propertyOpenFile = 0x01; // 打开文件
  static const int propertyReadWriteFile = 0x02; // 读取/写入文件
  static const int propertyCheckFile = 0x03; // 校验文件
  static const int propertyCloseFile = 0x04; // 关闭文件
  static const int propertyGetFileInfo = 0x05; // 获取文件信息
  static const int propertyDeleteFile = 0x06; // 删除文件
  static const int propertyRenameFile = 0x07; // 重命名文件
  static const int propertyGetFileList = 0x08; // 获取文件列表

  static const int openFileTypeReadOnly = 0; // 打开文件-只读
  static const int openFileTypeRw = 1; // 打开文件方式-读写
  static const int openFileTypeRwc = 2; // 打开文件方式-读写（不存在则创建）

  /* ******************** 通道4-文件操作 Property END ********************* */

  /* ******************** 通道5-存储设备操作 Property START ********************* */

  static const int PROPERTY_STORAGE_CAPACITY = 0x01; // 总容量及剩余容量
  static const int PROPERTY_STORAGE_INFO = 0x02; // 常规操作和状态获取

  static const int STORAGE_DATA_STOP = 0x0; // 终止当前操作
  static const int STORAGE_DATA_ERASE = 0x1; // 擦除磁盘
  static const int STORAGE_DATA_UNINSTALL = 0x2; // 卸载磁盘
  static const int STORAGE_DATA_FORCE_INSTALL = 0x3; // 强制加载磁盘

  /* ******************** 通道5-存储设备操作 Property END ********************* */

  /* ******************** 通道6-存储设备操作 Property START ********************* */

  static const int PROPERTY_BT_NAME = 0x01; // 蓝牙名称
  static const int PROPERTY_BT_PWD = 0x02; // 蓝牙密码
  static const int PROPERTY_BT_MAC = 0x03; // 蓝牙MAC地址
  static const int PROPERTY_BT_PWD_VERIFY = 0x04; // 验证蓝牙密码

  /* ******************** 通道6-存储设备操作 Property END ********************* */

  /* ******************** 通道3-通用控制 ERROR CODE START ********************* */

  static const int ERROR_CTRL_SUCCESS = 0x0; // 成功
  static const int ERROR_CTRL_INVALID_PARAM = 0x1; // 参数错误
  static const int ERROR_CTRL_NOT_SUPPORT = 0x2; // 目标设备不支持此操作
  static const int ERROR_CTRL_CAN_NOT_EXECUTE_NOW = 0x3; // 当前状态不允许此操作
  static const int ERROR_CTRL_PERMISSION_DENIED = 0x4; // 无权限
  static const int ERROR_CTRL_INTERNAL_ERROR = 0x5; // 内部执行错误

/* ******************** 通道3-通用控制 ERROR CODE END ********************* */
}

class VersionConstant {
  static const String v11Hmic129 = '1.2.9';
  static const String v11Hmic1228 = '1.2.28';

  static const String v12Hmic1424 = '1.4.24';
  static const String v12Hmic154 = '1.5.4';

  static const String s1Display130 = '1.3.0';

  static const String v10Like10200 = '102.0.0';
}
